<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
    #box1 {
        width: 300px;
        height: 300px;
        background-color: red;
    }
    #box2 {
        width: 200px;
        height: 200px;
        background-color: green;        
    }
    #box3 {
        width: 100px;
        height: 100px;
        background-color: blue;        
    }
    </style>
</head>
<body>
    <div id="all">
        <div id="box1">
            <div id="box2">
                <div id="box3"></div>
            </div>
        </div>
    </div>

    <script>
        var box1 = document.getElementById('box1');
        var box2 = document.getElementById('box2');
        var box3 = document.getElementById('box3');
        
        var a = [box1 , box2 , box3, document.body , document];

        a.forEach(function(item) {
            // item.onclick = function() {
            //     console.log(this);
            // }
        //    item.addEventListener('click' , function() {
        //        console.log(this);
        //    },false);  //false 代表事件冒泡

           item.addEventListener('click' , function() {
               console.log(this);
           }, true);  //true 代表事件捕获
        })
    </script>

    <pre>（1）冒泡型事件：事件按照从最特定的事件目标到最不特定的事件目标(document对象)的顺序触发。

            IE 5.5: div -> body -> document
          
            IE 6.0: div -> body -> html -> document
          
            Mozilla 1.0: div -> body -> html -> document -> window
          
          （2）捕获型事件(event capturing)：事件从最不精确的对象(document 对象)开始触发，然后到最精确(也可以在窗口级别捕获事件，不过必须由开发人员特别指定)。
          
          （3）DOM事件流：同时支持两种事件模型：捕获型事件和冒泡型事件，但是，捕获型事件先发生。两种事件流会触及DOM中的所有对象，从document对象开始，也在document对象结束。
          
            DOM事件模型最独特的性质是，文本节点也触发事件(在IE中不会)。
          
          支持W3C标准的浏览器在添加事件时用addEventListener(event,fn,useCapture)方法，基中第3个参数useCapture是一个Boolean值，用来设置事件是在事件捕获时执行，还是事件冒泡时执行。
          而不兼容W3C的浏览器(IE)用attachEvent()方法，此方法没有相关设置，不过IE的事件模型默认是在事件冒泡时执行的，也就是在useCapture等于false的时候执行，所以把在处理事件时把useCapture
          设置为false是比较安全，也实现兼容浏览器的效果。</pre>
</body>
</html>